package com.jyw.business.ins.domain.vo.web;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.jyw.business.ins.domain.InsPlanExecutionTime;
import com.jyw.common.annotation.Conversion;
import com.jyw.common.constant.SysDictTypeConstant;
import com.jyw.common.enums.ConversionType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.FieldNameConstants;

import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;

/**
 * @author Created by ZhangCheng on 2023/10/09
 */
@Data
@FieldNameConstants
@ApiModel("巡检计划计划详情返回实体")
public class InsPlanInfoVO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @ApiModelProperty("主键")
    private Long id;

    /**
     * 业务ID （巡检资产 巡检单元）
     */
    @ApiModelProperty("业务ID （巡检资产 巡检单元）")
    private Long businessId;

    /**
     * 计划类型（1巡检资产 2巡检单元）
     */
    @ApiModelProperty("计划类型（1巡检资产 2巡检单元）")
    private Integer businessType;

    /**
     * 生效类型（1立即生效 2指定日期）
     */
    @ApiModelProperty("生效类型（1立即生效 2指定日期）")
    private Integer effectiveType;

    /**
     * 生效开始日期
     */
    @ApiModelProperty("生效开始日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate effectiveStartDate;

    /**
     * 生效结束日期
     */
    @ApiModelProperty("生效结束日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate effectiveEndDate;

    /**
     * 巡检责任人ID
     */
    @ApiModelProperty("巡检责任人ID")
    @Conversion(value = ConversionType.USER,name = Fields.inspectUserName)
    private Long inspectUserId;

    /**
     * 巡检责任人名称
     */
    @ApiModelProperty("巡检责任人名称")
    private String inspectUserName;

    /**
     * 是否上传图片
     */
    @ApiModelProperty("是否上传图片")
    private Boolean uploadPhoto;

    /**
     * 限期整改（1是 0否）
     */
    @ApiModelProperty("限期整改（1是 0否）")
    private Boolean deadlineRectify;

    /**
     * 转工单（1是 0否）
     */
    @ApiModelProperty("转工单（1是 0否）")
    private Boolean workOrder;

    /**
     * 是否启用（1是 0否）
     */
    @ApiModelProperty("是否启用（1是 0否）")
    private Boolean isEnable;

    /**
     * 巡检周期（1每天 2每周 3每月 4每季度 5每半年 6每年）
     */
    @ApiModelProperty("巡检周期（1每天 2每周 3每月 4每季度 5每半年 6每年）")
    @Conversion(value = ConversionType.DICT,dictType = SysDictTypeConstant.INS_PLAN_INSPECTION_CYCLE,
            name = Fields.inspectionCycleName)
    private Integer inspectionCycle;

    /**
     * 巡检周期
     */
    @ApiModelProperty("巡检周期")
    private String inspectionCycleName;

    /**
     * 巡检次数
     */
    @ApiModelProperty("巡检次数")
    private Integer inspectionNum;

    /**
     * 每周多选（逗号分隔开 0不限制 1-7）
     */
    @ApiModelProperty("每周多选（逗号分隔开 0不限制 1-7）")
    private String weekly;

    /**
     * 每周多选（逗号分隔开 0不限制 1-7）
     */
    @ApiModelProperty("每周多选名称")
    private String weeklyName;

    /**
     * 每月多选（逗号分隔开 0不限制 1-31）
     */
    @ApiModelProperty("每月多选（逗号分隔开 0不限制 1-31）")
    private String monthly;

    /**
     * 到期宽限天
     */
    @ApiModelProperty("到期宽限天")
    private Integer graceDay;

    /**
     * 是否固定时间
     */
    @ApiModelProperty("是否固定时间")
    private Boolean isFixedTime;

    /**
     * 跳过节假日（1是 0否）
     */
    @ApiModelProperty("跳过节假日（1是 0否）")
    private Boolean skipHoliday;

    /**
     * 跳过周末（1是 0否）
     */
    @ApiModelProperty("跳过周末（1是 0否）")
    private Boolean skipWeekend;

    /**
     * 处理规则（1直接跳过 2次日处理）
     */
    @ApiModelProperty("处理规则（1直接跳过 2次日处理）")
    @Conversion(value = ConversionType.DICT,dictType = SysDictTypeConstant.INS_PLAN_PROCESSING_RULE,
            name = Fields.processingRuleName)
    private Integer processingRule;

    /**
     * 处理规则（1直接跳过 2次日处理）
     */
    @ApiModelProperty("处理规则名称")
    private String processingRuleName;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private Date createTime;

    /**
     * 巡检计划巡检项内容
     */
    @ApiModelProperty("巡检计划巡检项内容")
    List<InsPlanItemVO> planItemList;

    /**
     * 巡检计划执行时间多条
     */
    @ApiModelProperty("巡检计划执行时间多条")
    private List<InsPlanExecutionTime> executionTimeList;

    /**
     * 巡检计划执行时间多条
     */
    @ApiModelProperty("巡检计划执行时间")
    private String executionTimeStr;

    /**
     * 巡检对象编号
     */
    @ApiModelProperty("巡检对象编号")
    private String code;

    /**
     * 巡检对象名称
     */
    @ApiModelProperty("巡检对象名称")
    private String name;
}
